package view.eventos;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

import model.Alumno;
import model.Contacto;
import model.Estado_Evento;
import model.Evento;
import model.PersonalAdministrativo;
import model.comunication.IEvento;
import model.comunication.IUsuario;
import model.utils.Util;
import view.confirmaciones.DialogTypes;
import view.confirmaciones.ViewDialog;
import view.contacto.ConsultaContacto;
import view.contacto.CrearContacto;
import view.recados.CrearRecado;

import com.toedter.calendar.JDateChooser;

public class VerEvento extends JDialog {

	private static final long serialVersionUID = 1L;
	private JTextArea txtDescripcion;
	private JTextField textAlumnoInicial;
	private JTextField txtEmpleado;
	private JDateChooser dateEvento;
	private JDateChooser dateCreacion;
	private JDateChooser dateContactoInicial;
	private JDateChooser dateContactoFinalizacion;
	private Evento evento;
	private JTextField textTelefonoInicial;
	private JTextField textAlumnoFinalizacion;
	private JTextField textTelefonoFinalizacion;
	private JRadioButton radioButtonPendiente;
	private JRadioButton radioButtonRealizado;
	private JRadioButton radioButtonCancelado;
	private JPanel datosContactoInicialpanel;
	private JPanel datosContactoFinalizacionPanel;
	private IEvento comunicationEvento;
	private JTextField textMotivo;
	private JButton buttonContactoFinalizacion;
	private IUsuario cmmUsuario = IUsuario.getInstance();
	private PersonalAdministrativo personalAdministrativo;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VerEvento window = new VerEvento();
					window.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public VerEvento() {
		initialize();
	}

	/**
	 * Create the application.
	 */
	public VerEvento(Evento evento, PersonalAdministrativo personalAdministrativo) {
		this.personalAdministrativo = personalAdministrativo;
		this.comunicationEvento = IEvento.getInstance();
		this.evento = evento;
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		setResizable(false);
		setIconImage(Toolkit.getDefaultToolkit().getImage(VerEvento.class.getResource("/Icon_/calendar_64.png")));
		setTitle("Visualizar Tarea");
		setBounds(100, 100, 595, 489);
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		getContentPane().setLayout(null);
		setModal(true);
		JLabel lblEventoCreado = new JLabel("Tarea creada:");
		lblEventoCreado.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblEventoCreado.setBounds(12, 11, 84, 14);
		getContentPane().add(lblEventoCreado);

		JLabel lblVencimientoEvento = new JLabel("Vencimiento tarea:");
		lblVencimientoEvento.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblVencimientoEvento.setBounds(287, 11, 137, 14);
		getContentPane().add(lblVencimientoEvento);

		JLabel lblDescripcion = new JLabel("Descripcion:");
		lblDescripcion.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblDescripcion.setBounds(12, 40, 104, 14);
		getContentPane().add(lblDescripcion);

		this.txtDescripcion = new JTextArea();
		this.txtDescripcion.setColumns(10);
		this.txtDescripcion.setLineWrap(true);
		this.txtDescripcion.setWrapStyleWord(true);

		JScrollPane scrollTextArea = new JScrollPane();
		scrollTextArea.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollTextArea.setViewportView(this.txtDescripcion);
		scrollTextArea.setBounds(104, 40, 431, 69);
		getContentPane().add(scrollTextArea);

		JLabel lblEmpleadoAdministrativo = new JLabel("Administrativo:");
		lblEmpleadoAdministrativo.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblEmpleadoAdministrativo.setBounds(12, 292, 155, 14);
		getContentPane().add(lblEmpleadoAdministrativo);

		this.txtEmpleado = new JTextField();
		this.txtEmpleado.setBounds(104, 289, 160, 20);
		getContentPane().add(this.txtEmpleado);
		this.txtEmpleado.setColumns(10);

		JButton btnCerrar = new JButton("Cerrar");
		btnCerrar.setIcon(new ImageIcon(VerEvento.class.getResource("/Icon_/exit.png")));
		btnCerrar.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnCerrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnCerrar.setBounds(475, 420, 104, 30);
		getContentPane().add(btnCerrar);

		this.dateCreacion = new JDateChooser();
		this.dateCreacion.setBounds(104, 11, 132, 20);
		getContentPane().add(this.dateCreacion);

		this.dateEvento = new JDateChooser();
		this.dateEvento.setBounds(403, 11, 132, 20);
		getContentPane().add(this.dateEvento);

		this.datosContactoInicialpanel = new JPanel();
		FlowLayout fl_DatosContactoInicialpanel = (FlowLayout) datosContactoInicialpanel.getLayout();
		fl_DatosContactoInicialpanel.setHgap(30);
		this.datosContactoInicialpanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Datos de contacto inicial", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
		this.datosContactoInicialpanel.setBounds(12, 124, 259, 153);
		getContentPane().add(datosContactoInicialpanel);

		JLabel lblAlumno = new JLabel("Alumno:");
		this.datosContactoInicialpanel.add(lblAlumno);

		this.textAlumnoInicial = new JTextField();
		this.datosContactoInicialpanel.add(textAlumnoInicial);
		this.textAlumnoInicial.setColumns(10);

		JLabel lblTelefono = new JLabel("Telefono:");
		this.datosContactoInicialpanel.add(lblTelefono);

		this.textTelefonoInicial = new JTextField();
		this.textTelefonoInicial.setColumns(10);
		this.datosContactoInicialpanel.add(textTelefonoInicial);

		JLabel lblFechaDeContacto = new JLabel("Fecha de contacto:");
		this.datosContactoInicialpanel.add(lblFechaDeContacto);

		this.dateContactoInicial = new JDateChooser();
		this.datosContactoInicialpanel.add(dateContactoInicial);

		JButton btnContactoInicio = new JButton("Ver Contacto");
		btnContactoInicio.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnContactoInicio.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ConsultaContacto verEvento = new ConsultaContacto(evento.getContactoInicial());
			}
		});
		this.datosContactoInicialpanel.add(btnContactoInicio);

		this.datosContactoFinalizacionPanel = new JPanel();
		FlowLayout fl_datosContactoFinalizacionPanel = (FlowLayout) datosContactoFinalizacionPanel.getLayout();
		fl_datosContactoFinalizacionPanel.setHgap(30);
		this.datosContactoFinalizacionPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Datos de contacto finalizacion", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
		this.datosContactoFinalizacionPanel.setBounds(279, 124, 259, 153);
		getContentPane().add(datosContactoFinalizacionPanel);

		JLabel label = new JLabel("Alumno:");
		this.datosContactoFinalizacionPanel.add(label);

		this.textAlumnoFinalizacion = new JTextField();
		this.textAlumnoFinalizacion.setColumns(10);
		this.datosContactoFinalizacionPanel.add(textAlumnoFinalizacion);

		JLabel label_1 = new JLabel("Telefono:");
		this.datosContactoFinalizacionPanel.add(label_1);

		this.textTelefonoFinalizacion = new JTextField();
		this.textTelefonoFinalizacion.setColumns(10);
		this.datosContactoFinalizacionPanel.add(textTelefonoFinalizacion);

		JLabel label_2 = new JLabel("Fecha de contacto:");
		this.datosContactoFinalizacionPanel.add(label_2);

		this.dateContactoFinalizacion = new JDateChooser();
		this.datosContactoFinalizacionPanel.add(dateContactoFinalizacion);

		this.buttonContactoFinalizacion = new JButton("Ver Contacto");
		this.buttonContactoFinalizacion.setFont(new Font("Tahoma", Font.BOLD, 11));
		this.buttonContactoFinalizacion.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ConsultaContacto verEvento = new ConsultaContacto(evento.getContactoFinalizacion());
			}
		});
		this.datosContactoFinalizacionPanel.add(buttonContactoFinalizacion);

		JLabel lblEstadoTarea = new JLabel("Estado Tarea: ");
		lblEstadoTarea.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblEstadoTarea.setBounds(287, 292, 104, 14);
		getContentPane().add(lblEstadoTarea);
		ButtonGroup buttonGroup = new ButtonGroup();
		this.radioButtonPendiente = new JRadioButton("Pendiente");
		this.radioButtonPendiente.setFont(new Font("Tahoma", Font.BOLD, 11));
		this.radioButtonPendiente.setBounds(390, 288, 84, 23);
		buttonGroup.add(radioButtonPendiente);
		getContentPane().add(radioButtonPendiente);

		this.radioButtonRealizado = new JRadioButton("Realizado");
		this.radioButtonRealizado.setFont(new Font("Tahoma", Font.BOLD, 11));
		this.radioButtonRealizado.setBounds(482, 288, 84, 23);
		buttonGroup.add(radioButtonRealizado);
		getContentPane().add(radioButtonRealizado);

		JButton buttonCancelar = new JButton("Cancelar Tarea");
		buttonCancelar.setIcon(new ImageIcon(VerEvento.class.getResource("/Icon_/Erase_16.png")));
		buttonCancelar.setFont(new Font("Tahoma", Font.BOLD, 11));
		buttonCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Estado_Evento estadoEvento = evento.getEstado();
				if (!estadoEvento.equals(Estado_Evento.cancelado) && !estadoEvento.equals(Estado_Evento.cumplido)) {
					String motivo = JOptionPane.showInputDialog("Ingrese el motivo por la cancelacion de la tarea:");
					evento.setEstado(Estado_Evento.cancelado);
					evento.setMotivo(motivo);
					comunicationEvento.updateEvento(evento);
					CrearRecado newRecado = new CrearRecado(1);
					newRecado.setAsunto("Tarea cancelada");
					newRecado.setDestinatario(cmmUsuario.getUsuario(6).getName());
					newRecado.setMensaje("La tarea " + txtDescripcion.getText() + " fue cancelada porque " + motivo);
					dispose();
				} else {
					ViewDialog viewDialog = new ViewDialog(DialogTypes.Negative, "No se ha podido realizar la tarea");
				}
			}
		});
		buttonCancelar.setBounds(325, 420, 140, 30);
		getContentPane().add(buttonCancelar);

		JLabel lblMotivo = new JLabel("Motivo:");
		lblMotivo.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblMotivo.setBounds(12, 366, 52, 14);
		getContentPane().add(lblMotivo);

		this.textMotivo = new JTextField();
		this.textMotivo.setColumns(10);
		this.textMotivo.setBounds(74, 350, 459, 59);
		getContentPane().add(textMotivo);

		this.radioButtonCancelado = new JRadioButton("Cancelado");
		radioButtonCancelado.setFont(new Font("Tahoma", Font.BOLD, 11));
		this.radioButtonCancelado.setBounds(390, 317, 84, 23);
		buttonGroup.add(radioButtonCancelado);
		getContentPane().add(radioButtonCancelado);

		JButton btnRealizarTarea = new JButton("Realizar tarea");
		btnRealizarTarea.setIcon(new ImageIcon(VerEvento.class.getResource("/Icon_/tick_16.png")));
		btnRealizarTarea.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnRealizarTarea.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				JOptionPane option = new JOptionPane();
				Estado_Evento estadoEvento = evento.getEstado();
				if (!estadoEvento.equals(Estado_Evento.cumplido)) {

					CrearContacto crearContacto = new CrearContacto(evento.getContactoInicial().getAlumno(), personalAdministrativo);
					crearContacto.setVisible(true);
					if (crearContacto.getContacto() != null) {// TODO VERIFICAR EL NULL
						evento.setEstado(Estado_Evento.cumplido);
						evento.setContactoFinalizacion(crearContacto.getContacto());
						comunicationEvento.updateEvento(evento);
						int respuesta = JOptionPane.showConfirmDialog(null, "Se ha cumplido la tarea correctamente.", "Cumplido", JOptionPane.YES_NO_OPTION);
					} else {
						JOptionPane.showConfirmDialog(null, "No se ha completado la creacion del nuevo contacto. Por favor vuelva a intentarlo", "Cumplido", JOptionPane.ERROR_MESSAGE);
					}
				} else {
					ViewDialog viewDialog = new ViewDialog(DialogTypes.Negative, "error la tarea ya se ha realizado");
				}

			}
		});
		btnRealizarTarea.setBounds(169, 420, 146, 30);
		getContentPane().add(btnRealizarTarea);

		loadData();
		setVisible(true);
	}

	private void loadData() {
		Contacto contactoInicial = evento.getContactoInicial();
		Alumno alumnoInicial = contactoInicial.getAlumno();
		this.dateContactoInicial.setCalendar(contactoInicial.getFecha());
		this.dateContactoInicial.getCalendarButton().setEnabled(false);
		this.textAlumnoInicial.setText(Util.obtainName(alumnoInicial));
		this.textTelefonoInicial.setText(alumnoInicial.getTelefono());
		Contacto contactoFinalizacion = evento.getContactoFinalizacion();
		if (contactoFinalizacion != null) {
			Alumno alumnoFinalizacion = contactoFinalizacion.getAlumno();
			this.dateContactoFinalizacion.setCalendar(contactoFinalizacion.getFecha());
			this.dateContactoFinalizacion.getCalendarButton().setEnabled(false);
			this.textAlumnoFinalizacion.setText(Util.obtainName(alumnoFinalizacion));
			this.textTelefonoFinalizacion.setText(alumnoInicial.getTelefono());
			if (evento.getMotivo() != null) {
				this.textMotivo.setText(evento.getMotivo());
			} else {
				this.textMotivo.setEnabled(false);
			}
		} else {
			this.dateContactoFinalizacion.setEnabled(false);
			this.textAlumnoFinalizacion.setEnabled(false);
			this.textTelefonoFinalizacion.setEnabled(false);
			this.datosContactoFinalizacionPanel.setEnabled(false);
			this.buttonContactoFinalizacion.setEnabled(false);
			if (evento.getMotivo() != null) {
				this.textMotivo.setText(evento.getMotivo());
			} else {
				this.textMotivo.setEnabled(false);
			}
		}

		this.txtDescripcion.setText(evento.getComentario());
		this.txtDescripcion.setEditable(false);
		PersonalAdministrativo empleado = evento.getPersonalAdministrativo();
		this.txtEmpleado.setText(Util.obtainName(empleado));
		this.txtEmpleado.setEditable(false);
		this.dateCreacion.setCalendar(evento.getFechaCreacion());
		this.dateCreacion.getCalendarButton().setEnabled(false);
		this.dateEvento.setCalendar(evento.getFechaEvento());
		this.dateEvento.getCalendarButton().setEnabled(false);

		if (evento.getEstado().equals(Estado_Evento.pendiente)) {
			this.radioButtonPendiente.setSelected(true);
		} else if (evento.getEstado().equals(Estado_Evento.cumplido)) {
			this.radioButtonRealizado.setSelected(true);
		} else if (evento.getEstado().equals(Estado_Evento.cancelado)) {
			this.radioButtonCancelado.setSelected(true);
		}
	}
}
